import 'package:ycbl/ext/func.dart';
import 'package:ycbl/net/repository/bl_repository.dart';
import 'package:ycbl/utils/log_util.dart';
import 'package:ycbl/view_model/user_view_model.dart';
import 'package:ycbl/widget/provider/base_view_state_model.dart';


/// 因为登录这个操作 和 用户有关系，用户的变化，会通知其他页面刷新，所以持有 UserViewModel
/// 虽然将登录的操作，放在 UserViewModel 中也可以，但这样总感觉有那么一丢丢不优雅
/// 而且，登录是页面级别的，网络请求以及模型等都是页面级，所以它应该是持有全局的 UserViewModel 才对
class LoginViewModel extends BaseViewStateModel {

  final UserViewModel userViewModel;

  LoginViewModel(this.userViewModel): assert(userViewModel != null);

  /// 发起登录
  login(String phone, String code, BoolCallback loginCallBack) {

    setBusy();
    //按照分层 网络的请求 理论上应该放在 repository 中
    BLRepository.login(phone, code, (user){
      //登录成功，保存用户账号
      userViewModel.saveUser(user);
      setIdle();
      loginCallBack(true);
    }, (err){
      setError(err);
      loginCallBack(false);
    },);
  }

  /// 退出登录，外部其实可以直接获取并调用 userViewModel.clearUser() 来退出登录
  /// 但，为了统一管理登录和退出的处理，放在这里也算合适
  logout() async {

    LogUtil.d('logout...');
    //清除用户数据
    userViewModel.clearUser();
  }

}